"""
类名：MemberService，继承于BaseService
实例属性：
    服务名称：service_name，赋值为'MemberService'
实例方法：
    __init__(self)：需要先调用父类的__init__()，再添加实例属性
    def find_by_telephone(self, telephone):
        # 功能：根据手机号查询会员信息
        # :param telephone: 手机号
        # :return: 1. 如果会员存在，返回会员信息 2. 如果不存在，返回None
    def find_member_count_by_months(self, data_list):
        # 功能：根据日期统计会员数
        # :param date_list: 日期列表，格式如：["2020.10", "2021.7"]
        # :return: 列表，列表元素为对应月份的会员数，如：[2,10]
    def add(self, info): 添加会员
        # 功能：添加会员
        # :param info: 会员信息的字典格式数据，参考接口文档填入字段数据，手机号需要唯一
        #              如：{"fileNumber":"D0001", "name":"李白", "phoneNumber":"13020210002"}
        # :return: 添加成功返回True,  添加失败返回False
验证结果：
# 1. 实例化对象
# 2. 通过实例对象调用实例方法
# 2.1 根据手机号查询会员信息
# 2.2 根据日期统计会员数
# 2.3 添加会员
"""

import json

from base_service import BaseService


class MemberService(BaseService):
    """会员服务类：继承于BaseService"""

    def __init__(self):
        # 调用父类的同名方法
        super().__init__()
        # 服务名称：service_name
        self.service_name = 'MemberService'

    def find_by_telephone(self, telephone):
        """
        功能：根据手机号查询会员信息
        :param telephone: 手机号
        :return: 1. 如果会员存在，返回会员信息 2. 如果不存在，返回None
        """
        response = self.dubbo_client.invoke(self.service_name, "findByTelephone", telephone)

        #  如果response为'null'，说明没有会员，返回Python的None
        if response == 'null':
            return None
        else:
            # 否则，返回会员的字典格式信息
            # json.loads() json格式的字符串转换为Python的字典或列表
            return json.loads(response)

    def find_member_count_by_months(self, date_list):
        """
        # 功能：根据日期统计会员数
        # :param date_list: 日期列表，格式如：["2020.10", "2021.7"]
        # :return: 列表，列表元素为对应月份的会员数，如：[2,10]
        """
        response = self.dubbo_client.invoke(self.service_name, "findMemberCountByMonths", date_list)

        # json.loads() json格式的字符串转换为Python的字典或列表
        return json.loads(response)

    def add(self, info):
        """
        功能：添加会员
        :param info: 会员信息的字典格式数据，参考接口文档填入字段数据，手机号需要唯一
                     如：{"fileNumber":"D0001", "name":"李白", "phoneNumber":"13020210002"}
        :return: 添加成功返回True,  添加失败返回False
        """
        # info 增加 class对应的参数对象的类型
        info['class'] = 'com.itheima.pojo.Member'
        print('info = ', info)

        response = self.dubbo_client.invoke(self.service_name, "add", info)

        if response == 'null':
            return True
        else:
            return False


if __name__ == '__main__':
    # 1. 实例化对象
    member_service = MemberService()
    # 2. 通过实例对象调用实例方法
    # 2.1 根据手机号查询会员信息
    print('==========根据手机号查询会员信息==========')
    mobile = "1302021112"
    resp = member_service.find_by_telephone(mobile)
    print('type(resp) =', type(resp))
    print('resp = ', resp)
    # # 2.2 根据日期统计会员数
    print('==========根据日期统计会员数==========')
    resp = member_service.find_member_count_by_months(["2023.13"])
    print('type(resp) =', type(resp))
    print('resp = ', resp)
    # # 2.3 添加会员
    # print('==========添加会员==========')
    # info = {"fileNumber": "D0001", "name": "李白", "phoneNumber": "13020210002"}
    info = {"phoneNumber": "1302021112"}
    resp = member_service.add(info)
    print('type(resp) =', type(resp))
    print('resp = ', resp)
